package com.isoft.permanprovidor.unit;

import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;

public class FileUtil {
    /**
     * 获取文件扩展名，包括"."
     * @param fileName
     * @return
     */
    public static String getExtName(String fileName) {
        return  fileName.substring(fileName.lastIndexOf(".")) ;
    }

    /**
     * 检测给定目录是否存在，不存在，则创建该目录
     */
    public static boolean mkDir(String path) {
        boolean result = false ;
        File f = new File(path);
        if (!f.exists() || ! f.isDirectory())   {
            result = f.mkdirs();
        }
        return result ;
    }


    public static String uploadPhyPath(MultipartFile file, String newFileName, String uploadPath , HttpServletRequest request ){
        boolean result = false ;
        String photoUri = null ;   // 文件保存位置uri
        // 获得项目的路径
        String path = getAbsPath(uploadPath , request) ;
        // 检测目录是否存在，不存在，创建该目录
        File f = new File(path);
        if (!f.exists() || !f.isDirectory()) {
            f.mkdirs();
        }
        if (!file.isEmpty()) {
            try {
                // 保存文件
                file.transferTo(new File(path + newFileName));
                System.out.println(path + newFileName + "--ok");
                result = true ;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if(result) {
            return path + newFileName ;
        } else {
            return null ;
        }

    }

    /**
     * 文件上传
     * @param file   要上传的文件
     * @param newFileName      上传后文件名
     * @param request
     * @return 文件保存后的uri ， 如果返回null表示上传失败 ；
     */
    public static String uploadFile(MultipartFile file, String newFileName, String uploadPath , HttpServletRequest request ){
        boolean result = false ;
        String photoUri = null ;   // 文件保存位置uri

        // 获得项目的路径
        String path = getAbsPath(uploadPath , request) ;
        // 检测目录是否存在，不存在，创建该目录
        File f = new File(path);
        if (!f.exists() || !f.isDirectory()) {
            f.mkdirs();
        }

        if (!file.isEmpty()) {
            try {
                // 保存文件
                file.transferTo(new File(path + newFileName));
                System.out.println(path + newFileName + "--ok");
                // 取协议
                String scheme = request.getScheme();
                // 获取ip
                String serverName = request.getServerName();
                //  获取端口
                int serverPort = request.getServerPort();

                // 获取发布后项目名称
                String projectName = request.getContextPath();
                // 获取项目uri
                String s = scheme + "://" + serverName + ":" + serverPort  +  projectName ;
                // 获取文件uri
                photoUri = s + "/"+uploadPath+"/" + newFileName ;
                System.out.println(photoUri);
                result = true ;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        if(result) {
            return photoUri ;
        } else {
            return null ;
        }
    }

    public static String getAbsPath(String path , HttpServletRequest request) {
        // 获取ServletContext对象
        ServletContext sc = request.getServletContext();
        // 获取上传位置物理路径
        return sc.getRealPath(path) + "/"; // 设定文件保存的目录
    }
}
